package br.com.cogerh.sidec.util;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

import org.hibernate.SessionFactory;
public class ConexaoHibernatFilter implements Filter{
	
	private SessionFactory sf;

	@Override
	public void destroy() {
		
	}

	@Override
	public void doFilter(ServletRequest serveletFilter, ServletResponse serveletResponse,
			FilterChain chain) throws IOException, ServletException {

		try {
				this.sf.getCurrentSession().beginTransaction();
				chain.doFilter(serveletFilter, serveletResponse);
				this.sf.getCurrentSession().getTransaction().commit();
				this.sf.getCurrentSession().close();	
					} catch (Throwable ex) {

					try {
						if(this.sf.getCurrentSession().getTransaction().isActive()){
							this.sf.getCurrentSession().getTransaction().rollback();
						}
						
					} catch (Throwable t) {
						t.printStackTrace();
					}
					
					throw new ServletException();
					}
					
	}

	@Override
	public void init(FilterConfig arg0) throws ServletException {
		//Atribuiu ao sessioFactory, a sessao
				this.sf = HibernateUtil.getSessionFactory();
	}
	
	

}
